package com.chuangke.flow.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.chuangke.common.db.page.CkPageQuery;
import com.chuangke.flow.entity.FlowHiFlow;
import com.chuangke.flow.entity.FlowRuFlow;
import com.chuangke.flow.entity.FlowRuTask;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface FlowQueryService {
	
	/**
	 * 查询我创建的任务列表
	 * @param pageQuery
	 * @return
	 */
	IPage<FlowHiFlow> findMyCreatedTask(CkPageQuery pageQuery) ;

	IPage<FlowHiFlow> findMyCreatedTaskForName(CkPageQuery pageQuery) ;
	
	/**
	 * 查询我创建的任务数量
	 * @param userId
	 * @return
	 */
	long findMyCreatedTaskCount(String userId) ;

	/**
	 * 查询待办任务列表
	 * @param pageQuery
	 * @return
	 */
	IPage<FlowRuFlow> findTodoTask(CkPageQuery pageQuery) ;
	
	/**
	 * 查询待办任务列表
	 * @param pageQuery
	 * @return
	 */
	IPage<FlowRuFlow> findTodoTask2(CkPageQuery pageQuery) ;
	
	/**
	 * 查询待办任务列表数量
	 * @param userId
	 * @return
	 */
	int findTodoTaskCount(String userId) ;
	
	/**
	 * 查询待办任务列表数量
	 * @param userId
	 * @return
	 */
	long findTodoTaskCount2(HashMap<String, Object> params) ;
	
	/**
	 * 查询已办任务
	 * @param pageQuery
	 * @return
	 */
	IPage<FlowHiFlow> findDoneTask(CkPageQuery pageQuery) ;
	IPage<FlowHiFlow> findDoneTaskWithName(CkPageQuery pageQuery) ;
	
	/**
	 * 查询已办任务数量
	 * @param userId
	 * @return
	 */
	int findDoneTaskCount(String userId) ;
	
	/**
	 * 查询已办结任务
	 * @param pageQuery
	 * @return
	 */
	IPage<FlowHiFlow> findDownAndOverTask(CkPageQuery pageQuery) ;

	IPage<FlowHiFlow> findDownAndOverTaskWithName(CkPageQuery pageQuery);

	/**
	 * 查询已办结任务数量
	 * @param userId
	 * @return
	 */
	int findDownAndOverTaskCount(String userId) ;
	
	/**
	 * 查询退回任务
	 * @param pageQuery
	 * @return
	 */
	IPage<FlowHiFlow> findRejectTask(CkPageQuery pageQuery) ;
	IPage<FlowHiFlow> findRejectTaskWithName(CkPageQuery pageQuery) ;
	
	/**
	 * 查询退回任务数量
	 * @param userId
	 * @return
	 */
	int findRejectTaskCount(String userId) ;
	
	/**
	 * 获取流程的审批节点及审批人
	 * @param businessKey
	 * @return
	 */
	Map<String,Map<String,Object>> listTask(String businessKey) ;
	
	/**
	 * 获取单据的审批信息
	 * @param businessKey
	 * @return
	 */
	List<Map<String,Object>> listApprovalInfo(String businessKey) ;

	IPage<FlowRuFlow> findTodoForName(CkPageQuery pageQuery);

	List<FlowRuTask> listByUserAndOrderIds(String userId, List<String> billIds);
	
	List<Map<String,String>> listNextAuditUsers(String orderId,String userId) ;
}
